package javaCode.chapter14.homework;

import java.util.*;

/**
 * @author 徐州城
 * @version 1.0
 * 定义一个泛型类 DAO<T>，在其中定义一个Map 成员变量，Map的键为 String类型，值为T类型
 * 分别创建一下方法：
 * 1. public void save(String id,T entity)：保存 T类型到对象 Map成员变量中
 * 2. public T get(String id)：从map中获取 id对应的对象
 * 3. public void update(String id, T entity)：替换 map中 key为id的内容，改为entity对象
 * 4. public List<T> list()：返回 map中存放的所有 T对象
 * 5. public void delete(String id)：删除指定 id 对象
 */
public class DAO<T> {//泛型类
    private Map<String, T> map = new HashMap<>();

    public void save(String id, T entity) {//保存 T类型到对象 Map成员变量中
        this.map.put(id, entity);
    }

    public T get(String id) {//从map中获取 id对应的对象
        return map.get(id);
    }

    public void update(String id, T entity) {//替换 map中 key为id的内容，改为entity对象
        this.map.put(id, entity);
    }

    //遍历map ,将map 的所有value(entity)返回，封装到ArrayList
    public List<T> list() {
        //Collection<T> values = this.map.values();
        //return (List<T>) values;

        //创建ArrayList
        List<T> list = new ArrayList<>();
        //遍历map
        Set<String> keySet = map.keySet();
        for (String key : keySet) {
            //map.get(key) 返回的就是 泛型T
            list.add(map.get(key));//也可以直接使用本类的 get(String id)
        }
        return list;
    }

    public void delete(String id) {
        this.map.remove(id);
    }
}
